const DIGITS: &str = "0123456789abcdef";

// 将任意进制的数字字符串转换为十进制整数
pub fn to_decimal(num_str: &str, base: u32) -> u32 {
    let mut result = 0;

    //将字符串的字符反转，使从个位开始
    for (i, ch) in num_str.chars().rev().enumerate() {
        let digit_value = DIGITS.chars().position(|c| c == ch).unwrap() as u32;
        result += digit_value * base.pow(i as u32);
    }

    result
}

// 将十进制整数转换为指定的进制
pub fn from_decimal(num: u32, base: u32) -> String {
    //检查是否为0
    if num == 0 {
        return "0".to_string();
    }

    let mut result = String::new();
    let mut num = num;

    //num%base : 当前位的值
    //num/base : 处理下一位
    while num > 0 {
        let remainder = (num % base) as usize;
        result.push(DIGITS.chars().nth(remainder).unwrap());
        num /= base;
    }

    result.chars().rev().collect() // 反转字符串以得到正确的顺序
}

// 转换任意进制的数字
pub fn convert_base(num_str: &str, base_to: u32) -> String {
    // 解析输入字符串中的进制
    let base_from: u32 = num_str.split('(').nth(1).unwrap().trim_end_matches(')').parse().unwrap();
    let num_str = num_str.split('(').next().unwrap().trim(); // 提取数字部分
    
    // 将原始数字转换为十进制
    let decimal_value = to_decimal(num_str, base_from);

    // 将十进制转换为目标进制
    from_decimal(decimal_value, base_to)
}